module mruby.irep;

import mruby.value;
import mruby;
import mruby.mrb_debug;
import mruby.compile;

extern (C):

enum irep_pool_type
{
	IREP_TT_STRING = 0,
	IREP_TT_FIXNUM = 1,
	IREP_TT_FLOAT = 2
}

struct mrb_locals
{
	mrb_sym name;
	ushort r;
}

struct mrb_irep
{
	ushort nlocals;
	ushort nregs;
	ubyte flags;
	mrb_code* iseq;
	mrb_value* pool;
	mrb_sym* syms;
	mrb_irep** reps;
	mrb_locals* lv;
	const(char)* filename;
	ushort* lines;
	mrb_irep_debug_info* debug_info;
	size_t ilen;
	size_t plen;
	size_t slen;
	size_t rlen;
	size_t refcnt;
}

mrb_irep* mrb_add_irep (mrb_state* mrb);
mrb_value mrb_load_irep (mrb_state*, const(ubyte)*);
mrb_value mrb_load_irep_cxt (mrb_state*, const(ubyte)*, mrbc_context*);
void mrb_irep_free (mrb_state*, mrb_irep*);
void mrb_irep_incref (mrb_state*, mrb_irep*);
void mrb_irep_decref (mrb_state*, mrb_irep*);